package com.jk.controller;

import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

/**
 * 类描述：
 *
 * @ClassName WebController
 * @Description TODO
 * @Author fandasen
 * @Date 2022/6/1 10:27
 * @Version 1.0
 */
@Component
@ServerEndpoint(value = "/MyServer")
//服务端点
public class WebController {
        //统计连接人数
        private static volatile int total = 0;
        //记录每个连接的session，以便发送消息
        private static Set<Session> sessions = new HashSet<>();

        //建立连接回调方法
        @OnOpen
        public void onOpen(Session session){
            total++;
            sessions.add(session);
            sendMessage("有人加入了聊天室,当前人数"+ total);
        }

        //连接断开回调
        @OnClose
        public void onClose(Session session){
            //移除已断开的连接
            total --;
            sessions.remove(session);
            sendMessage("有人离开了聊天室,当前人数"+ total);
        }

        //收到消息时回调
        @OnMessage
        public void onMessage(Session session,String message){
            //将消息广播给所有人
            sendMessage(message);
        }


        public void sendMessage(String message){
            //循环给每个连接的客户端发送消息
            for (Session session : sessions) {
                try {
                    session.getBasicRemote().sendText(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
}
